<template>
    <el-input type="number"  v-bind="$attrs" :value="value" @input="handleInput" @keypress.native="allowOnNumbers" ></el-input>
</template>
<script>

export default {
  inheritAttrs: false,
  name: 'number-input',
  props: {
    // 用于不可修改的反显下拉框的值，配合defaultVal使用
    value: [String, Number],
    numType: {
      type: String,
      default: 'integer'
    }
  },
  created () {
  },
  methods: {
    allowOnNumbers (event) {
      const char = String.fromCharCode(event.which)
      if (char === '+' || char === '-') {
        if (!this.numType.startsWith('sign')) {
          // 无符号
          event.preventDefault()
        }
        // 有符号
        if (this.value !== '') {
          // 非第一位不能是符号
          event.preventDefault()
        }
      } else if (char === '.') {
        if (!this.numType.endsWith('decimal')) {
          // 不是小数
          event.preventDefault()
        }
        // 小数
        if (this.value === '') {
          // 第一位不能是小数点
          event.preventDefault()
        }
        if (this.value.indexOf('.') > 0) {
          // 已经有小数点
          event.preventDefault()
        }
      } else if (char < '0' || char > '9') {
        // 非数字
        event.preventDefault()
      }
    },
    handleInput (val) {
      this.$emit('input', val)
    }
  }

}
</script>
